{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d1f20875-c50d-46df-906b-49ec1d0c6002",
   "metadata": {},
   "source": [
    "# 6.9 实现多分类"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "c90a18b9-d8e8-431c-856c-35f1e4ed05e1",
   "metadata": {},
   "source": [
    "### 1.任务描述\n",
    "\n",
    "要求：\n",
    "- 下载鸢尾花公共数据集\n",
    "- 对数据集进行部分取样，抽取出样本中的花瓣长和花瓣宽两个特征\n",
    "- 通过预处理，将采样数据转换成可训练数据\n",
    "- 训练模型，实现对山鸢尾、变色鸢尾和维吉尼亚鸢尾三种类别的分类\n",
    "- 绘制损失曲线和准确率曲线"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "f5b4fc39-cbcf-432a-bf1e-e75e642d4b87",
   "metadata": {},
   "source": [
    "### 2.知识准备\n",
    "\n",
    "见教程。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b624ebee-980f-4c1e-b963-a24ff0b669f6",
   "metadata": {},
   "source": [
    "### 3.任务分析\n",
    "\n",
    "根据切片法按列切分从官网下载的数据集，切分为训练特征数据集和标签数据集。其中，特征列只选用其中两列。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "435c6090-cfda-4f46-a550-22a368e41e4a",
   "metadata": {},
   "source": [
    "### 4.任务实施\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "ec75eb6c-5da3-467d-a471-ca3b47242dd6",
   "metadata": {},
   "source": [
    "执行代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2ae9da58-e339-4d22-9f8d-ca255711d89e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 0.35 4.5097613\n",
      "100 0.8083333333333333 0.50354075\n",
      "200 0.8833333333333333 0.4029282\n",
      "300 0.8916666666666667 0.352664\n",
      "400 0.9416666666666667 0.31977877\n",
      "500 0.9416666666666667 0.29560515\n",
      "<tf.Variable 'Variable:0' shape=(3, 3) dtype=float32, numpy=\n",
      "array([[ 4.068752  , -1.045631  , -4.424165  ],\n",
      "       [-0.552819  ,  1.2314974 ,  0.79756755],\n",
      "       [-1.7617829 , -1.2241224 ,  2.2805147 ]], dtype=float32)>\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGxCAYAAABvIsx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbjklEQVR4nO3deVxU5f4H8M+ZlXVYVUQQcN9zSVPTqMyl1NZbZt5yydKWH9UtvJrd6225WlZqi1ppalpYaQu2mHtmpXVFxQUTFxAUEFRghmX25/cHMDIqCDozB4bP+/WaF3POnHPmO8+dnM99znOeIwkhBIiIiIi8iELuAoiIiIhcjQGHiIiIvA4DDhEREXkdBhwiIiLyOgw4RERE5HUYcIiIiMjrMOAQERGR12HAISIiIq+jkrsAOdjtduTk5CAwMBCSJMldDhEREdWBEAIGgwGRkZFQKGrvo2mSAScnJwfR0dFyl0FERERXITs7G1FRUbVu0yQDTmBgIICKBtLpdDJXQ0RERHWh1+sRHR3t+B2vTZMMOFWnpXQ6HQMOERFRI1OX4SUcZExERERehwGHiIiIvA4DDhEREXmdJjkGx10OnCrGvlNFaN88AP3bhMldDhERUZPFHhwX2nYkH//69iDWpebIXQoREVGTxoDjQorKQd12u5C3ECIioiaOAceFFJUJxy4YcIiIiOTEgONCCqkq4MhcCBERURPHgONCjlNU7MEhIiKSFQOOC1X14DDfEBERyYsBx4UkiWNwiIiIGgIGHBe6cIpK3jqIiIiaOgYcF1KwB4eIiKhBYMBxoaoeHMGAQ0REJCsGHBdyjMGxy1wIERFRE8eA40I8RUVERNQwMOC4EOfBISIiahgYcFzowq0aZC6EiIioifOagDNixAisWLFC1hp4ioqIiKhh8IqA89lnn2HDhg1yl8F5cIiIiBqIRh9wzp8/j+effx4dO3aUu5Rqt2pgwiEiIpKTSu4CrtXzzz+Pe+65B+Xl5XKXAomDjImIiBqERh1wtm3bhi1btuDQoUP4v//7vxq3M5lMMJlMjmW9Xu+WehScB4eIiKhBaLSnqIxGI6ZMmYLFixcjMDCw1m3nzJmDoKAgxyM6OtotNXGQMRERUcPQaAPOq6++ir59+2LkyJFX3HbGjBkoLi52PLKzs91S04VbNbjl8ERERFRHjfYUVVJSEgoKChAcHAwAKCsrw5dffok///wTixYtctpWq9VCq9W6vSaJPThEREQNQqMNODt27IDVanUsv/DCC+jfvz8mTJggW02cyZiIiKhhaLQBJyoqymk5ICAA4eHhCA8Pl6miC2NwbMw3REREsmq0Aedics9iDABKBefBISIiagga7SDjhojz4BARETUMDDguxHlwiIiIGgYGHBfiPDhEREQNAwOOC3EeHCIiooaBAceFOA8OERFRw8CA40KcB4eIiKhhYMBxIYXjMnGZCyEiImriGHBciD04REREDQMDjgtdGIMjcyFERERNHAOOCzlu1cCEQ0REJCsGHBdSSrxVAxERUUPAgONCF27VIG8dRERETR0DjgtxJmMiIqKGoUEGHJvNJncJV0VR2ZrswSEiIpKXrAHHaDTi1ltvRU5OjtP6iRMn4rnnnpOpqqun4BgcIiKiBsGjAcdsNiMhIQHnzp0DACiVSvz8889OPTZGoxHJyck4ePCgJ0tzCc6DQ0RE1DB4vAdn4cKFKC0tBQCo1WoAgFardby+ePFilJSUYObMmZ4u7ZpxHhwiIqKGwaMBR6PRQAjhFGiq0+v1eOONN/DAAw/g5ptv9mRpLsFBxkRERA2DLGNwqno6LvbYY49BpVLh3Xff9XBFrlF1ior5hoiISF6yX0UlSRKKioowZswYbNy4ERs2bECzZs3kLuuqsAeHiIioYVC5+w22bt2KnTt3IiwszDHmZu3atYiMjERAQACEELj++uvRtWtX7Ny5E506dXJ3SW5T1THFWzUQERHJy+0BZ9euXVi2bBlUKhUUlRPFvP766yguLobBYAAAlJaW4v7770f79u3dXY5bKRVVl4nLXAgREVET5/ZTVC+++CKOHz+OI0eO4PDhwwCA3bt3o7i4GGazGQDwz3/+E3PnzkW/fv2Ql5fn7pLchqeoiIiIGgZZx+CoVBUdSM8++ywOHz6MkJAQ9O/fH9nZ2XKWddUkzoNDRETUIHgk4JSVlWHatGnIz8+vcZuQkBB8//33aNGiBe655x5YrdY6HbuoqAh//PEHCgsLXVXuVVNwHhwiIqIGwSMBZ//+/Vi7di1iY2MhSRIyMzMvu52Pjw9WrlyJtLQ0vP7661c87po1axAbG4vJkycjKioKa9ascXHl9aOodvk7b9dAREQkH48EnP79++PEiRP48ccfMWTIEAwePBjTpk1zDDKufquGjh07IjExEW+88UatPT7FxcV48skn8csvv+DAgQNYuHAhEhMT3f5ZaqOoNr0Pe3GIiIjk49ExODfffDM2btyItWvXIikpCadOnQIAmEwmp+2mTJkCq9WKP//8s8Zj6fV6LFiwAD169AAA9O7d23GPK7lUn8CQ43CIiIjk4/bLxC9n9OjRGDp0KNRqNVavXn3JxH6RkZHYu3dvrXPiREdHY9y4cQAAi8WC+fPn45577nFr3Vfi3IPDgENERCQXWQIOUDHeBgDGjBlz2dfrOuFfamoqbr31Vmg0Gsdl6BczmUxOvUR6vb6e1daN8xgct7wFERER1YHst2q4nPLycowZM6bGwcjV9ejRAxs3bkT79u0xefLky24zZ84cBAUFOR7R0dEurriCgqeoiIiIGgRJeOByn02bNsHHxwdCCBiNRnTr1g233norfHx8HLMbW61W9OvXD0uXLsW//vUvvPvuu9izZw/atm1bp/fIyMhA27Ztcf78eQQHBzu9drkenOjoaBQXF0On07nscxotNnT6108AgAP/GYZAH7XLjk1ERNTU6fV6BAUF1en32yOnqIYPH47Y2FjYbDacPn0ax48fR3p6Ot577z2n7WJiYpCVlYW3334bixYtqjXcbN++Hd9//z3efPNNAIBGo4EkSY7AVJ1Wq4VWq3Xth7oM5x4ct78dERER1cAjAUepVOLEiRMoKipCWFgYgIorjp566qlLtn3ggQfQp08fTJgwodZjdujQAR999BHat2+P22+/HS+99BKGDRvm0h6Z+lIqOA8OERFRQ+CRMThVl09Xv4y6yrx585CUlITU1FRYrVaMGzeuTpP8tWzZEmvXrsU777yDrl27oqysDCtXrnR57fXBeXCIiIgaBo9eRXW5Xo0FCxbgzJkzsFgs8PX1xcMPP4w33nijTscbOnQoDh065OoyrxrnwSEiImoYPHoVlXSZWxlkZWXBZDKhqKgISUlJ2LFjB2688UbZJ+27WgrecJOIiEh2Hgk4NpsNkyZNwpNPPulYJ0kShBCw2+2w2+0ICAjAnXfeiV27dkGSJDz22GOeKM3lqgYaM98QERHJxyMBZ9KkSQgICEBISAgmTZoEoKIHR6VSQa1WOx433ngjAgMDsXjxYiQnJ2P37t2eKM+lLtxRnAmHiIhILh4Zg7NkyRKnZZPJhC1btsDX19dx2spkMsHX1xcAMGjQIHTr1g2LFy/Gxx9/7IkSXUZynKKStw4iIqKmzKODjOfNm4eDBw9i2bJl6NGjB+644w788MMPCA8Pv2Tbf/zjHxg2bJgny3MJRw8OEw4REZFs3B5wjh496piELzc3F2fOnEF2drbjFNWCBQvw+OOPO+2jVqsxfvx4d5fmFlWDjHmGioiISD5uDzi9e/dGWVmZ07rY2FgAFeNwdu3ahTlz5lyyX/fu3bFv3z53l+dyVT04NiYcIiIi2bg94OzZswcajQYqlQoLFy7EoUOHsGjRIgBAYWEhevbsiY8//hi33XabY5/09HQMGTIEqampuO6669xdoktJvEyciIhIdm4POO3bt3c89/X1hVKpRKtWrQAArVq1Qv/+/bF69WqnU1JBQUEYOHCgu0tzi6rbNfBWDURERPLx6CDj+++/36mnBgBee+01+Pj4OK0LCAjAr7/+6snSXObCZeIyF0JERNSEeSTg2Gw2nDhxAp06dbrktZtvvtkTJXiMxHlwiIiIZOeRgHPu3Dl0794dRqMRANCnTx9oNBqo1erLbh8YGIiEhAQMHz7cE+W5lONWDXZ56yAiImrKPBJwtFqt02mo/fv344MPPgAAbN68GUOGDHG6T9WBAwcwYcIE5ObmeqI8l+JMxkRERPLz2M02JUnCkiVL8P3330OSJDz66KM4deoU1q1bhwMHDkCSJCgUCpjNZkyZMgWxsbEoLy/3VHkuw3lwiIiI5OfRQcZnzpzBs88+C5vNhj///BMLFy7Ezz//jIceegi///47gIreHZPJhJ07d3qyNJfhGBwiIiL5uT3gLFmyBBs2bIAkSXjppZfw5JNPIiIiAv369cPRo0cRFBQEAPjf//4HAGjWrJm7S3IrRWWfGAMOERGRfNwecPbu3QubzeZYtlgsAICSkhI8+eSTeOONNwAAs2bNghCiUZ6Wqo5jcIiIiOTn9oCzaNEiFBUVIS4uDnPnzsV7771X8cYqFWw2GwYNGoTY2FgcOnQIarUao0ePdndJbsV5cIiIiOTnsTE4drsdN998Mx544AF06NABGRkZeOmll/D888+ja9eumDx5smPbtLQ0AECXLl08VZ7LOG7VwIRDREQkG48EHKPRCJPJhH79+gGoCDvdunUDUHFLg02bNmHBggWOAbpCCEiS5HRqq7FQsgeHiIhIdh65TFyn02HRokXYunUrnn76aRQXF8NoNMJms8Fut8Nut8Nms2HmzJn48ccfYTKZUFxc7InSXE4h8V5UREREcvNIwPHz88OkSZMQGRmJpKQk/P77706zGFssFtx///147733kJeXB7VajYCAAE+U5nIX7iYubx1ERERNmdtPUS1YsABpaWkIDw8HAHTs2BF///vf8dRTTyEkJASRkZH44IMPUFhYiH379iEmJsbdJbkVr6IiIiKSn9sDzpkzZ3D8+HFkZWVBoVAgLCwMISEh+Pnnn2EwGJCXl4fc3FwEBARg2rRp+Pvf/46RI0dCofDYJMsuxXlwiIiI5Of2gDNnzhzH8/Pnz+Nf//oXYmJi0KpVK7Rs2RIDBgwAAKSmpuLHH39EQkICnn76abzwwgt4/PHHodVq3V2iS10YgyNzIURERE2YR7tJrFYrfH19kZ6eji+++ALPPvsszp07B19fX/Tv3x+vvPIKjh49imeffRZz585tlFdR8VYNRERE8vPovaiaN2+Ot956q9ZtVCoVnnvuOTz22GPw8/Orddvk5GQ899xzyMrKQrdu3bB69Wp07tzZlSXXm4KDjImIiGTXYAe6HDhwoNbXjx8/jokTJ+L111/H6dOn0aFDB6fJAuVSdYrKxoRDREQkmwYZcEpKSnDzzTfjpZdeqnGbw4cP4/XXX8cDDzyAFi1a4IknnsDevXs9WOXlVfXgcB4cIiIi+XjkFFVRURH27t2LwYMHQ6W68lvu3LkTFosFYWFhNW4zatQop+UjR46gffv211zrtZI4kzEREZHsPNKDc+bMGQwZMgRhYWF44IEH8OOPP8Jut9e4/Q8//AClUokxY8bU6fhmsxlvv/02pk6detnXTSYT9Hq908NdlBxkTEREJDuPnaLy9/fHQw89hJ07d2LUqFGIjo7G3LlzYTQanbazWCz48ssvMWrUKERGRtbp2LNmzYK/v3+NY3DmzJmDoKAgxyM6OvqaP09NOA8OERGR/DwWcHx9fbF48WJkZ2fjt99+w5AhQzBr1iy0adMGH3/8sWO7L774Anl5efjHP/5Rp+Nu3boVCxcuRFJSktPtH6qbMWMGiouLHY/s7GyXfKbL4Tw4RERE8pNlkPGAAQOwZMkSHDt2DMOGDcOUKVNw1113IT09Hf/85z9x5513YvDgwVc8TkZGBsaOHYuFCxeiS5cuNW6n1Wqh0+mcHu7CeXCIiIjk5/GAI4TAe++9h9atWyM7OxsrVqzApk2bkJKSgq5du8Jut2Px4sVXPE55eTlGjRqFu+66C/fccw9KSkpQUlIi+9VLnAeHiIhIfh4POMOGDcNzzz2H4cOHo1mzZgCAli1bIiwsDDabDT169EDLli2veJyNGzciLS0NS5YsQWBgoONx8uRJd3+EWvFmm0RERPLzeMCZOHEifvvtN6xcuRLh4eGYNm0aevXqhbKyMrz//vvYunUrFi1adMXj3HXXXRBCXPKIjY11/4eoBefBISIikp9Hb9UAAA899BAOHjyIp59+GitXroQQAs8//zxmzJgBf39/5OTkYMaMGbj33nsRERHh6fKuGefBISIikp/HenCMRiOmT5+OTp064brrrkNycjL+8Y9/4MSJE3jttdfg7+8PAHjxxRfh6+uLWbNmeao0l6rqweGtGoiIiOTjkYBjt9tRUlKCpKQkDBkyBJs3b0ZWVhb+85//OMbhVPHz88M//vEPrFy5Enl5eZ4oz6UuXCbOgENERCQXjwQcq9UKnU6HrKwsLFy4ELfccovjVM7lTJw4EXa7HcuWLfNEeS6l4CkqIiIi2XnsFNXFPTVX2va2227DqlWr3FiReygUvIqKiIhIbh4ZZNy9e3ccPXq0XvtMnDixUQ4y5jw4RERE8vPoIOO5c+fi/PnzV9y2oKAAUVFRGDRokAcqcy2OwSEiIpKfR+fBmTFjhuNO3l9//TX+/e9/X3a7/fv348Ybb8SPP/7oyfJcQnL04DDgEBERycVjAcfHxwdKpRJBQUHIzMzEo48+ivXr18NisVyy7aFDhwAAvXr18lR5LsNBxkRERPLzaA+OSqWC1WrFAw88AJ1Oh08++eSydwDfunUrunfvXqdbNjQ0CvbgEBERyc6jAUcIgenTp2P//v1YtmwZbr/9dowdOxbnzp1zbKPX67F582b8/e9/92RpLnNhDI7MhRARETVhHr8X1SOPPIIFCxYgPj4eM2bMwM6dO9G1a1f8/PPPAICPPvoIarUakydP9nRpLuG4VQPPUREREcnGIwGnoKAABw8ehCRJ6NWrF6ZOnQqVSoWpU6fi6NGjGDNmDIYNG4ZZs2bh1VdfxYwZMxAcHOyJ0lzOcasGduEQERHJxu3z4DzyyCP48ssvceutt172dbVajXfeeQetW7fGtGnT0LdvXyQmJrq7LLfRqCoyo8lql7kSIiKipsvtPTjnzp3DiBEj8Oyzz9a4zY8//oj58+fD398fR48exZkzZ9xdltsEaCsyY6nJKnMlRERETZfbA866devw7bffYtiwYRBCoLy8HL///jsA4JdffsGwYcMwatQo3HbbbTh58iTatWuHZ555xt1luY1/ZcApYcAhIiKSjdsDjlKpdFqeOXMmRowYgT179uDjjz+GXq/H+vXrsWLFCoSEhOD999/HV199hb1797q7NLfwZw8OERGR7DxyL6oqkiQhISEBv/32G0aOHIktW7agS5cuTtv07dsXgwcPxoIFC/DJJ594sjyXCNBWBLpSk03mSoiIiJouj18mHhsbi19++QUBAQG4//77UVRUdMk29957L9auXYuSkhJPl3fN/DU8RUVERCQ3jwUcm80Go9EIk8mEZs2a4fvvv0dmZibWr19/ybZDhgxBeXk5Nm/e7KnyXIaDjImIiOTnsVNUJpMJ48ePd9yaoWPHjti+fTuuv/76S7bt0KEDhgwZgtatW3uqPJfhGBwiIiL5eSzg+Pn5Yfny5U7rLhdugIp7Vm3atMkTZbkcr6IiIiKSn8fH4Hg7xykqsw2CsxkTERHJggHHxfwrr6Ky2QVnMyYiIpIJA46L+WkunPXjaSoiIiJ5NOqAc/bsWcTFxSEzM1PuUhyUCgm+6qq5cBhwiIiI5NBoA87Zs2cxatSoBhVuqnCgMRERkbwabcB58MEH8dBDD8ldxmVxNmMiIiJ5NdqAs2TJEiQkJMhdxmVxLhwiIiJ5efReVK4UFxdX521NJhNMJpNjWa/Xu6MkB56iIiIiklej7cGpjzlz5iAoKMjxiI6Oduv76XwqAs7CbceQfb7Mre9FREREl2oSAWfGjBkoLi52PLKzs936fmP7tYZKIeGvPANueetnzPh6P4MOERGRB0mikU+3K0kSMjIyEBsbW+d99Ho9goKCUFxcDJ1O55a6Dp4uxhs//YUdR88CABQSMLxrBCYMjEW/uFBIkuSW9yUiIvJW9fn9ZsBxU8CpsjvzPN7ZctQRdACgc0sdJg6MxajrWjpNDEhEREQ1Y8C5Ak8GnCpH8gz4ZGcmvt5zCkZLxS0c/DVK3NG9Je7rE4V+saFQKNirQ0REVJMmFXCuhhwBp0pRmRlf/C8bn/2Rhaxq43KiQnxxT69WGNEtAl1a6ngKi4iI6CIMOFcgZ8CpIoTA/zIL8VXKKfxwINfpkvLWoX64vVsERnSLwHVRwezZISIiAgPOFTWEgFNdudmGjWl5+GF/LranFzjdhTzUX4NB7cJxU4dmuKl9OJrrfGSslIiISD4MOFfQ0AJOdaUmK34+UoCfDuVh21/5l0wW2CkiEDe2C0ff2FD0jQ1BWIBWpkqJiIg8iwHnChpywKnOYrNjz8lC/HK0AL+kn8XBnGJc/L9W22b+6BcXiutjQnFddBDiwgOg5CktIiLyQgw4V9BYAs7FzpWY8Ouxs/gj4zz+l3EeR/NLLtnGX6NE18ggdI8KQvdWQejWKghx4f4MPURE1Ogx4FxBYw04FyssNWP3yUL8L/M89pwsxKEcPcotl97BXKtSoF3zAHRoEVj5qHjeKtiXA5iJiKjRYMC5Am8JOBez2QWOF5TgwKliHDhd8TiUU+yYd+difhol4sL9ERvmj9hwP8SEVT4P80OzQC0vVSciogaFAecKvDXgXI7NLpB9vgzpZww4ml+CI3kGpJ8x4ERBKcy2ywcfAPBVKxET5ofoUD+0CvZFZLAPIoN90TLIF62CfdEsUMvTXkRE5FEMOFfQlAJOTaw2OzLPlSHzbCkyz5Xi5Lkyx99ThWWwX+FboVJIaKHzcYSfFkE+aBagRbNALZoH+qBZYMVznY+KPUFEROQS9fn95o2QmiiVsmJcTrvmAZe8ZrbacaqwIvCcLixHTrEROUXllQ8j8vRGWO0Cp4vKcbqovNb30aoUlaFH6wg9of5ahPipEeqvQbCfBqF+GgRXLvtplAxERER0zRhw6BIalQJtmgWgTbNLww9Qcdor31ARek4XVfzN15uQbzCiwGBCQYkJBQYTDEYrTFY7ThWW41Rh7UHI8d5KBUL81Qjx01Q8qj0P9lMj2E8DnY8KgT5qBPqooPNRQ+erQoBWBZVS4cpmICKiRowBh+pNqZDQMqhiPE6fmJq3KzfbcLbEhHxDReApqAxA58vMKCy1oLDMjMIyCwpLzThfZobZaofZZscZvQln9KZ61+WnUUJXGXwCfVTQ+aodQcgRhirDkZ9GCX+tCn4aJQK0KvhpVfDXKOGnUUGjYlAiImrsGHDIbXw1SkSHVgxUvhIhBMotNkfgKSwz43ypGUVllsq/Zpwvs6C43AKD0QJ9uQUGoxUGo9VxaXyZ2YYysw15+murW62U4K9VwV9TEYCqwo9/VQiqFob8tUr4qCsevk5/FRXPNRfW+aqV0KoUvDSfiMgDGHCoQZAkCX4aFfw0KrQK9q3XvhabvTLsWKAvr/xrtEJvtFyy3mC0wmCyoNRkQ5nZeuGv2QZz5T3ALDaBojILisos7vio0KoUF0KPpiL0+GqcA5JWrXCEoupBSatSQKtSQKNSQKu6dFnjtHxhvVopcWwTETUpDDjU6KmVCoT6axDqr7mm41hsdpSZbCg1Wx3hp7R6CKr2t2K9FWVmG4yWike5xQajxV7tuQ3lZhuMVrsjPAGAyWqHyWpHcbl7AlRNagpGF4chjVIBrVpR7a8SapUEjVIBteMhVexbtaxSQKOUqr2ugEYlVXtebVulVLl9xTKnGyAid2DAIaqkVioQ5KdAkJ/a5ce22cVFQagiDFUPQuUWG0yV68qrbWuy2B2vGy02mG0Vgclkrfpru2jZ7hjPVF1VsDLAWkOV8lBIFW2vqQxCaqUCqsqwpFJIUFWGIufnF/5evK1GWfFXpZSgvszrzvs5H0utUkCtuLC/SiFBqZAcQawuy+wpI2oYGHCIPECpqBzXo/Xcf3J2u4DZVnMQMtvsMFnsMNtslX8rlk02O0yVQcpkscNiq3oImKzVl+0wW4Xzsk3AUnlsi81e+dx5G4vNeZIlu7gQvlD/seUNjrIy9NQ1HKkqw1fVuurLaqUEpaJiWSFV7qOUoJQkp/dRVDueUrr8NkqFAkoFnP9KzrVe7uF474uOWfGaAgoFoKo61kXbKCQw8JFsGHCIvJRCIcFHUTF2pyERQsBSGXrM1qpgZL9kndVesWy1CVjtFa9Xf17xWuX6y7xurTyGuXI7q03AYhdO+1irjlO53lxtP4vNDru9Yh9b5eu2asu2GmbDrHrN7OF2bagUEirDzoUAJkmoFoIu/lvx3VVevF4hQSkBCklyfr1yfdW2l2xfbVtJkirC3WWP4fzeimqBsfqxqn+Oim3g/L6OgIeLPvOl6xUXhcHq66Vqn0mSKmuuelR7T6fnDJROGHCIyKMkSYJGVTGGx18rdzVXT4jK4FP5sFWGJkcIqr5sq9q2bssVQU3AZq8KXwI2cSFYWe0C9qq/ovJ1u73GbWzVHxdtY7vcQ1yox25HZV2oeI/qxxcVf2ubD98uALtNAGhyk+bLQqoKSpXBqCo0VT2vCpxS1fPK8KVQXAhRzuHqQiiTpGoh85KgdSGkVb3PyB4tcVfPVrK1BQMOEdFVkCpP26gaVgeZLOyXCU5V66q/ZrcDdnH59VXPq4JjxTa4sG3luorXL11vtwvYhfN6u7jM65dZb6usq2q94/WqeivX1bTe8Xq1z2Gv1h4V++Kiz1z1vDIsOz7/hWM7novaQ2R1orINbA0gUHaKCJT1/RlwiIjomigUEhSQ0MDOhnoVURlybJVBS1QLa1XhyfFcXH59VYCsHvScQ9Slr13ueW3vUf15t1by3uuRAYeIiKiBk6pOOYFjbOqKc9ITERGR12HAISIiIq/DgENERERehwGHiIiIvE6THGQsKq+30+uv8bbTRERE5DFVv9uiDtfNN8mAYzAYAADR0dEyV0JERET1ZTAYEBQUVOs2kqhLDPIydrsdOTk5CAwMdPm01nq9HtHR0cjOzoZOJ+8cAN6M7ewZbGfPYDt7BtvZM9zZzkIIGAwGREZGQqGofZRNk+zBUSgUiIqKcut76HQ6/gfkAWxnz2A7ewbb2TPYzp7hrna+Us9NFQ4yJiIiIq/DgENERERehwHHxbRaLWbNmgWtthHfJrkRYDt7BtvZM9jOnsF29oyG0s5NcpAxEREReTf24BAREZHXYcAhIiIir8OAQ0TkAUVFRfjjjz9QWFgodylETQIDjgsdPHgQffv2RUhICBITE+s0lTTV7OzZs4iLi0NmZqZjXW1tvH37dnTu3Bnh4eGYN2+eDBU3PsnJyWjTpg1UKhV69uyJw4cPA2A7u9qaNWsQGxuLyZMnIyoqCmvWrAHAdnanESNGYMWKFQBqb8u1a9ciJiYGkZGRWL16tQyVNj4JCQmQJMnxaNeuHYAG+H0W5BJGo1HExsaKKVOmiGPHjok77rhDLFu2TO6yGq2CggJxww03CAAiIyNDCFF7G+fn5wudTidefvllkZ6eLnr37i22bt0q4ydo+I4dOyZCQkLEF198IfLy8sT9998vBg4cyHZ2saKiIhEeHi5SU1OFEEIsX75cxMTEsJ3d6NNPPxUAxPLly2ttywMHDgiNRiOWLFki9u/fL9q1ayf++usvmatv+AYMGCB++OEHUVhYKAoLC4Ver2+Q32cGHBf55ptvREhIiCgtLRVCCLFv3z5x4403ylxV4zVkyBDxzjvvOAWc2tp4/vz5olOnTsJutwshhPj222/FuHHjZKm9sfjuu+/Ehx9+6FjeunWr8PX1ZTu7WFZWlvj0008dy6mpqSIgIIDt7Cbnzp0TLVq0EB07dhTLly+vtS2feeYZMXz4cMe+CxYsEDNnzpSl7sbCYrEInU4nDAaD0/qG+H3mKSoXSU1NRf/+/eHn5wcA6NGjB9LS0mSuqvFasmQJEhISnNbV1sapqam45ZZbHPcW69evH1JSUjxbdCMzatQoPP74447lI0eOoH379mxnF4uOjsa4ceMAABaLBfPnz8c999zDdnaT559/Hvfccw/69+8PoPa2TE1Nxa233urYl+18ZQcOHIDdbkfPnj3h6+uLESNGICsrq0F+nxlwXESv1yMuLs6xLEkSlEolBxRepeptWaW2Nr74NZ1Oh5ycHI/U6g3MZjPefvttTJ06le3sJqmpqYiIiMBPP/2Ed999l+3sBtu2bcOWLVswd+5cx7ra2pLtXH9paWno2LEjVq1ahf3790OlUuHxxx9vkN9nBhwXUalUl8za6OPjg7KyMpkq8j61tfHFr7Ht62fWrFnw9/fH5MmT2c5u0qNHD2zcuBHt27dnO7uB0WjElClTsHjxYgQGBjrW19aWbOf6GzduHHbv3o0BAwagffv2WLRoETZt2gS73d7gvs8MOC4SGhqKgoICp3UGgwEajUamirxPbW188Wts+7rbunUrFi5ciKSkJKjVarazm0iShD59+uCTTz7B119/zXZ2sVdffRV9+/bFyJEjndbX1pZs52vXvHlz2O12RERENLjvMwOOi/Tt2xc7d+50LGdkZMBkMiE0NFTGqrxLbW188Wt79+5Fq1at5CizUcnIyMDYsWOxcOFCdOnSBQDb2dW2b9+OxMREx7JGo4EkSejcuTPb2YWSkpKQnJyM4OBgBAcHIykpCU8++SQ++eSTGtuS7Vx/iYmJSEpKcizv3LkTCoUC3bt3b3jfZ7cPY24iLBaLaNasmeOyuMmTJ4tRo0bJXFXjh2pXUdXWxgUFBcLHx0ds2rRJmM1mMWLECPH000/LVXajUFZWJrp06SIee+wxYTAYHA+z2cx2dqGcnByh0+nEhx9+KLKyssQjjzwiRowYwe+zi2VnZ4uMjAzH47777hNvvvlmrW25b98+4e/vL/bv3y8MBoPo2bOneOutt2T+JA3bqlWrRFxcnNi8ebPYsGGD6NChg5gwYUKD/D4z4LhQcnKy8PPzE2FhYaJZs2bi0KFDcpfU6FUPOELU3saLFy8WarVahISEiLi4OJGXlydDxY3Ht99+KwBc8sjIyGA7u9jGjRtFly5dRGBgoPjb3/4m8vPzhRD8PrvT+PHjxfLly4UQtbfliy++KDQajdDpdKJPnz6irKxMpoobj+nTp4ugoCARGhoqEhISRElJiRCi4X2feTdxF8vLy0NKSgr69++PsLAwucvxSrW1cUZGBv766y8MHjwYAQEBMlXoHdjOnsF29oza2jItLQ2nT59GfHw8x+Bco4b0fWbAISIiIq/DQcZERETkdRhwiIiIyOsw4BAREZHXYcAhIiIir8OAQ0RucfG9ZsrLy/Hdd9/BaDRizZo1iIuLg9ForPUYJpMJBw4ccCybzWaUlpZeU11jxozBRx99VKdtq+rbuHEj1q1bBwAoKSlxvL5hwwanZSJqOBhwiMjljh07hvbt2+O7775zrPvtt99w7733oqCgAD4+Po6/tdmxYwd69OiBbdu2Aai4zDQgIABbtmwBAGzevPmy97QxGAyYNm0aTCaT0/rCwkJ89dVX8PX1veJnWLduHQYOHIiSkhJ88803SEpKgt1uR7du3bBt2zaYzWaMHj0aK1euvOKxiMjzGHCIyOXatWuH66+/Hi+//LJj3ffff4/u3bvDZrOhsLAQvr6+yMzMRGZmJo4dO4azZ89ecpwNGzYgNjYW8fHxAIDg4GAAgNVqRWlpKcaNG4epU6dest+pU6ewePFiPPPMM07rP//8c7Rs2RIPPvjgFT/DyJEjERYWhrfffhtqtRoajQZr166Fn58f4uPjkZqaCqvVivvuu68+TUNEHsKAQ0RukZiYiBMnTuDEiROwWq348ssvsXfvXsTFxWH8+PE4e/Ys4uLiEBcXh/bt22Pp0qVO+9tsNqxZswaTJk2CQlHxT1VISAgAoKysDP7+/vjwww+xatUqp/vcAEDnzp2xdOlSfPjhh1i9erVj/UcffYRTp0457gdV/aFQKJCbm+vYdsWKFbjpppsQFhaGtLQ0HD16FMeOHUN8fDzWrl2LzZs3o2vXrtBqtSgqKkJRUREKCgou6TUiInmo5C6AiLzTHXfcgWPHjiE0NBTLly9HSUkJzp07h9DQUCQnJyMxMRHp6ekAKsa62O12p/2/++47nDx5Eg899JBjnUajQUBAAIqLiwEAd999N7Zu3YoBAwZc8v5jxozBhg0bMHXqVMTHx2P//v04dOgQ/vjjDzRv3txp28TERGRnZ6Nly5aOddu3b8e5c+dw7NgxpKenIyYmBikpKbDZbEhJScHvv/+OgwcPOkJXlR07dmDQoEHX1nhEdM0YcIjIpcxmM/bv3w+tVgtJkhAaGoq77roLvXv3doSB3NxctGjRwrGPj48PzGYzLBYL1Go1AODtt98GAKftACA0NBSFhYUAgOzsbOTn52PKlCkYPnw47r33Xqdt582bh549e6JZs2aYOXMmJk6ciH79+uGXX35BaWkpbr/9dgghsHPnzktOda1cuRIpKSkYNmwYunbtiq5duyIgIABvvvkmSkpK8Oabb2Lz5s0YMmQIcnNzERkZiaysLERGRrq2QYnoqjDgEJFLFRQU4JZbboFSqURxcTGEEGjduvVlr36SJMlpefny5ZgwYQKSk5Px66+/Or2Wm5uLPXv2wGaz4d1338Wbb76J/Px8dO7cGX369LnsvW2Cg4ORkJCAL774AidOnMD69esBAF9//TWSk5ORkZGBffv24fTp07jrrrsc+1mtVixevBgvvfQS5s2bhwMHDiA/Px9KpRLDhw/H8OHDIYRw9CTl5uZCoVAgIiICSqXymtuQiK5dkww4drsdOTk5CAwMvOQfWCK6NoGBgTh9+jR27tyJESNGQK/XY+fOndBoNFAqlZAkCUOHDkWHDh2wePFiABXjbcrLyxESEoLMzEw8+eSTiI+Pd5wm6tixI3JychAZGQmr1YrQ0FC8//776NWrl1Ow0ev1l9STm5uL22+/HX/++Sd8fHyg1+tRVlaGFi1aQK/Xo23btjh69CiaN2/u2L+goAAbN27EZ599hm7duiElJQX9+vXDww8/jK+++grTp09Hs2bNsGvXLtx22204fvw4WrZsifLycpSXl3umoYmaICEEDAYDIiMjHWPzatIkb7Z56tQpREdHy10GERERXYXs7GxERUXVuk2T7MEJDAwEUNFAOp1O5mqIiIioLvR6PaKjox2/47VpkgGn6rSUTqdjwCEiImpk6jK8hPPgEBERkddhwCEiIiKvw4BDREREXqdJjsEhIqLGq9RkxbNf7EPHFoE4cLoY10UFYfvRswj1U6NtswDojRZYbALNdVqk5ehxrsQsd8lN0th+0Xh4QKxs78+AQ0REjcqK3zOxKe0MNqWdAQBsTy9wvLbtSEFNu5GHFRjkvS8bAw4RETUqecXGem1/W+cWeGRAjJuqoZq0DvWT9f0ZcIiIqFERqN/8tL1aB+OmDs3cVA01VBxkTEREjYq+3Fqv7SN0Pm6qhBoyBhwiImpU6nuKqmUQA05TxIBDRESNSq6+fjc0jWDAaZIYcIiIqNGw2wXOFNfv6hwGnKaJg4yJiKjOThWW4Yf9uegRFYzMc6UI9FFhX1aRx97fbLPDbLPXax8/DX/qmiL+r05ERHU29dMUHDytl7uMS4zs0RI/7M+VuwxqQBhwiIi8kBAC61Jz0KFFIPZmFeH62BDsyypCuxYB+PXoWQBAn5gQnCoswxl93U75lJltlw03XSN1GNzec5dhSxJwU/tmOJKnR/eoIOzLLsbfekfhscFtkH7GgCBfNTQqBXKKytEzOthjdVHDIgkh6jehgBfQ6/UICgpCcXExdDqd3OUQEbnc2pRTeGFNqkfeK2nyDRjYLtwj70VNW31+v9mDQ0QNVnGZBb8fP4tOLXU4XVgOna8KEiTkFpcjp6h+V9I0NUt2ZNT4Wqi/BkG+amScLQUADGwbhthw/zod10elxKD2YTica0DbZgEoKjNjQNswl9RM5EoMOETUYL2wNtVxvyFynUcHxSEmzA9PJ+0FALw3thfCArT1OsatnVq4ozQil2HAIWoCDEYLfj5SAKu9flefyKnUZKs13HRrpUNMWN16HZoiCcDg9uE4eqYE10UHI+VkIXq1DsaRPAMeHRQHjVKBxOFlaBPuX+9wQ9QYcAwOx+BQE/B/q/fiu9QcuctwqR3TbkG0zDfzIyLP4hgcoibEaLEh81wpInQ+KC63QCFJSD9jcLxeZrbhh/0V4WZQu3BIklyV1p+vWokb2oThWH4JYsL8UFxugRAVdylmuCGi2jDgEDVy//3hMFbtOnnF7Qa1C8enk2/wQEVERPJjwCFq5C4XbnzVSnSICHQs+6gUmH57J0+WRUQkKwYcokbsfKn5sutv7dQcC8f19nA1REQNBwMOkQeUmKxQKSTojRYUlVlcdtzdmYWXXd+rdbDL3oOIqDFiwCFys3MlJgxfsANnS+p3B+Rr0TUyyGPvRUTUEDHgENVDYakZCoUEnY8K+QYT6jLJwqpdmU7hxl+jhI9a6bKa/LRK9I0JRdb5MrQK8YXZasf1sSEuOz4RUWPEgENUR5//mYXpXx+AJAFKSYLVfnVTSH371I1o3yLwyhsSEdFVY8ChJsVuF5AkoNxiq9d+NrvAe1uPAQCEAKyVXTdqZd0mlYkO9YNSktC/TRjDDRGRBzDgUJPxxk9/YfWfWdD5qJF1vuyaj3djuzB8Nrm/CyojIiJXY8ChJmPxz8cB4KqvYpIk4KWRXVBYasZnf5zESyO7uLI8IiJyIQYcahIuvuVap4hAfP3kwHodQyFJjsHBLwzv6LLaiIjI9RhwqEkwmKxOy31iQuCn4defiMhb8V948lqni8rx5Gd70KWlDl+lnHJ6LSaMN2okIvJmDDjktV757hBSs4uQml3ktF7no8JdPVvJUxQREXkEAw55rZPnLr1S6sZ2Yfjo4evhr+VXn4jImynkLgAADh48iL59+yIkJASJiYmXDAi9mBACTzzxBEJDQxEcHIwJEyagvLzcQ9VSYyCEQJ7eeMn6YD8Nww0RURMg+7/0JpMJo0ePxvDhw/H5558jISEBK1aswMSJE2vcZ9WqVThy5Aj27t0LvV6PSZMmYc6cOXjllVc8WDl52uvr/8LOE+fqtK3Nbr/s5eAFes/dD4qIiOQje8BZv349iouLMW/ePPj5+WH27Nl46qmnag04f/75J/72t78hJiYGAHD33Xfj0KFDniqZZLA3qxAfbD9+zceZeGPstRdDREQNnuwBJzU1Ff3794efX8VVLT169EBaWlqt+3Tt2hWrVq3CfffdB6PRiM8//xz/+Mc/atzeZDLBZLrw/9z1er1riieXMllteGP9EbQM8sG+7CLojRd6YKpmHr6tcwuM7Rddp+MpJAm9Y0JwqrAMrUP9kHm2DN1a6dxSOxERNSyyBxy9Xo+4uDjHsiRJUCqVKCwsREjI5e+IPHnyZCxevBgREREAgNGjR2P8+PE1vsecOXPw8ssvu7ZwcrnP/8zGst8yanxdkoDnhrZH18igeh03yLdi++5R9duPiIgaL9kDjkqlglardVrn4+ODsrKyGgPOO++8g+DgYJw8eRKSJGHKlClITEzE22+/fdntZ8yY4dTDo9frER1dt14A8oxPfs/ErHXOpxn/OaITIoIufDdah/rXO9wQEVHTJHvACQ0NxcGDB53WGQwGaDSaGvf57LPP8Morr6B169YAKnpo4uPjaww4Wq32khBFDcdfefpLwk33VkGYGt8GklS3u3UTERFVJ3vA6du3L5YsWeJYzsjIgMlkQmhoaI372O125OfnO5bz8vJgs9ncWiddO6PFhve3HsP5MrPT+kOniwEAAVoVvpjSH3nFRnRrFcRwQ0REV032gHPTTTdBr9dj+fLlmDhxImbPno3bbrsNSqUSRUVFCAwMhFKpdNpn8ODBeP3116FUKmE2m/HGG2/gzjvvlOkTUF198nsm3t92rObXJ/VF18ggnoYiIqJrJokrzarnAevWrcPYsWPh6+sLhUKBn3/+GV26dIEkSdi7dy969uzptH1RURESEhLw008/wWAwYPjw4Vi6dCnCw8Pr9H56vR5BQUEoLi6GTseratwlNbsIPx3KQ9U37Os9p5BvMOHe3q0QG+bvtG3bZgEY2aOlDFUSEVFjUZ/f7wYRcICK00wpKSno378/wsLC3PpeDDiecfOb25B50e0Swvw1+G36rfBRK2vYi4iI6PLq8/st+ymqKhERERg5cqTcZdA1MFvtSN53Grd1bgGL3Y7Mc2WQJGDiwDhIEiABuL17BMMNERG5XYMJONT4vbvlKN7fdgy3dW6BB66PAgB0aB6If4/uInNlRETU1DDgkEuUm22OAcSbD5+ByVpxVVuv1sEyVkVERE1Vg7ibODV+3+477bS84+hZAAw4REQkD/bg0DXbf6oIM74+AAAY2681ysxWGC02hAdoMfq6SJmrIyKipogBh67JkTwD7nz/NwCAv0aJGXd0gs5HLXNVRETU1DHgUJ1ZbXbsySqC0XJh1ujVf2Y5nr92TzeGGyIiahAYcKjOPth+HG9tTL/sa2unDsD1sTXfXoOIiMiTGHCozn5Jrxg4HB3qi0DthZ6aG9qEok/M5e/8TkREJAcGHKoTi82O/aeLAADLJ/RDu+YB8hZERERUCwYccmKzC2SfL4P9ojt4nCgohdFih85HhTbh/jXsTURE1DAw4JCThNV78cOB3Bpf79k6BAqF5MGKiIiI6s/lAUcIgaNHj6JDhw6uPjS5UYnJiuP5JY5wE+hz6VdDq1LioX7Rni6NiIio3uoVcCwWC1avXo2HH34YNpsNKtWF3Xft2oVu3bpBpVKhc+fOKCsrg1ardXnB5Ho/HsjFU0l7UHVW6rbOLbB0/PXyFkVERHQN6nWrBpvNhokTJ+LIkSMYMGAAysrKAACnT5/G6NGjsWjRImi1WgghoNFo3FIw1c5is9frYbba8c7mo45wE+ijQsKQdvJ+CCIiomtUrx4crVYLHx8ftGjRAiaTCePGjcPatWvxyCOPoHfv3njhhRcgSZLjQZ4jhMDjq1KwKe3MVe3vp1Fi54whCPLlRH1ERNT41asHR5Ik+Pv7IyQkBD/88APy8/Nx+vRp9OrVC8uWLcMff/zhrjrpCvZkFV51uAGAxwa3YbghIiKvcdWDjCVJwm+/VdyDaOzYsRg+fDjMZjPS09MhLrrEmNxryS8n8N8fDwMA7usdhX+P7lKv/ZUKCQFaXlBHRETe46p/1UaPHo2HH34YTz31FEaNGgWr1YpFixa5sjaqA73RggWbL9w+YWo8e2KIiIjqHHBKS0uRnJzsWP73v/+NRx55BFqtFrt378b8+fNx4sQJ7NmzBwCwd+9eCCFgt9thNBoxaNAg11fvZc6XmjFpxf+QV2ys8z5mmx2lZhvCAzTY8vzNDDdERESoR8D597//jfnz5yM8PBzvvfceJk6ciGeeeQYJCQmQJAktWrTAP//5T7z44osAgD59+jj2lSQJNputpkNTpU9+z8S+7KKr2vfFOzoz3BAREVWSRB0HzJw4cQIqlQrXXXcdmjdvjri4OPTp0wc5OTnYsWMHunbtiri4OEyfPh2RkZHIza2YMM5ms8FoNKJNmzZu/SD1odfrERQUhOLiYuh0OrnLgRAC0786gC92ZwMA/j2qC/rF1f3O3P5aFWLD/HjlGhERebX6/H7XuQenKqCo1Wrs2bMHCQkJWLBgAe666y5s2rQJffv2hUajQUREBACgRYsW1/ARmpZfjp51hJuYMD88PCAGamW9LnAjIiKiaq5qkLG/vz8+/vhjGI1GdO/eHXFxcXjttddw5szVX6bclC37NQMA0CcmBEsfuZ7hhoiI6BrV+5e0aixNSkoKoqOjMX36dEyaNAnFxcWYNWsWAPBUST2UmqzYcbQAAPDW/dchxJ8zQBMREV2regUcu92O0tJSGAwGPPDAAygpKQEAPP3005gzZw7+/PNPtxTpzfafKoZdAJFBPogL95e7HCIiIq9Qr4BTVlYGs9kMIQSGDh2K9957DwDQu3dvTJ06FY888gjKy8shhIDZbHZLwd5mb3YhAKBX6xCZKyEiIvIe9Qo4AQEBsNvt0Ol0+OCDD5xORb300kv44YcfAAAdO3bkZeF1tDerCADQq3WwrHUQERF5E5fNzx8QEICAgAAAwOHDh111WK938HQxAOC66GB5CyEiIvIi1xRwzp8/D41GA42m5oGxtb3W1JWbbcitnLW4XbMAmashIiLyHtd0PXJ4eDiCgoLg6+tb40Oj0WDNmjWuqterZJ4rBQAE+ap59RQREZEL1Tvg/PLLL47nISEhSE9Px5EjRxAQEID09HTcfPPNSE9PR3p6Og4fPoz777+fN+GsQebZioATy6uniIiIXKrep6huvvlm3HXXXXj55ZehVCrRtm1bAHA89/f3d6wDgNdeew1hYWGuq9iLZFT24LRhwCEiInKpegccPz8/REREoF+/flAoFJg0aRKAikvIJ02ahNTUVMe6KnPmzGkQ93xqaBw9OGEMOERERK5U51NUBw8ehNVqhUajweLFi5Geng6FQoG2bduiTZs2jh4cPz8/tG3b1unBgcaXd/JcGQAgNtxP5kqIiIi8S53vJn7LLbegoKAAOTk5OH/+PACgefPmyM/PBwCEhobi/PnzuPPOO7Fu3Tr3VewCDeVu4kPnbcfR/BIkTb4BA9uFy1YHERFRY1Cf3+869+AsXboUN9xwA4qLi5GQkACbzYbi4mIMGzYMw4YNQ0lJCYYNG4Zdu3bhwQcfxNy5c3H8+PFr/jDerKjcAgAI8lPLXAkREZF3qXMPTpXff/8d48aNQ1RUFEaNGoW4uDgAFTfhNBqNMBgMyM3NRUpKCrZv34777rsPCxYsQPPmzd3yAa5GQ+jBEUKgw0vrYbEJ/D79VkQG+8pSBxERUWNRn9/veg0yPnv2LP7880/s2bMHDzzwAMaMGQO1Wo2ysjJotVqnbS0WC7KysjB9+nRs2bIFY8eOrfG4Bw8exMSJE3Hs2DFMnjwZc+fOrdMdye12OwYNGoT77rsPzz//fH0+iuxKzTZYbBXZMsSPY5SIiIhcqV7z4BQVFeFf//oXQkJCsGnTJsTGxmL69Ono0qWL06DiuLg4dO7cGR999BG2bNmCBx54oMZjmkwmjB49Gn369MHu3buRlpaGFStW1KmeDz74wHHKrLEpKqu4GalGpYCP+prmWyQiIqKL1OuXVa1WQwhxydiaFStWwGKxOB5VdxNfvXo1AgICoFQqazzm+vXrUVxcjHnz5qFt27aYPXs2Pv744yvWkpOTgxdffBHvvfce1OrGN4alqKxi/E2In7pOvVVERERUd/WeB6esrAwdOnRAq1atcN999yE7Oxv5+fk4ceIEJEmCEAKSJCEjIwNCCCgUCsTGxtZ4vNTUVPTv3x9+fhWXSvfo0QNpaWlXrOPZZ59FTEwMsrOz8fvvv2PgwIH1/SiyKqzswQn25ekpIiIiV6tXD47NZoNOp8Px48cxe/ZsR7h44YUX0LFjR3Tt2hVdu3aFRqNBly5d0KlTJ/To0aPWY+r1esdAZQCQJAlKpRKFhYU17rNz506sWbMGUVFROH78OMaPH4+nn366xu1NJhP0er3TQ25VPTjBvIKKiIjI5eoVcEpLS2E0GhEbG4u///3vWLt2LY4fP467774bKpUKn376KcrLyx0Ps9mMoqKiWo+pUqkuGaDs4+ODsrKyGvdZsmQJbrjhBnz//fd45ZVXsHXrVixatAhHjhy57PZz5sxBUFCQ4xEdHV2fj+0WVWNwOMCYiIjI9eoVcLp37w6j0ei0Ljo6Gl999RXeeustdOrU6dI3UNT+FqGhoSgoKHBaZzAYap39+NSpU7jjjjscY1eio6PRrFmzGufdmTFjBoqLix2P7OzsWmvyhEL24BAREblNvS/fsdvt2Lp1K8xms9P6p556Cl26dHEsm0wm3HHHHcjLy6v1eH379sXOnTsdyxkZGTCZTAgNDa1xn6ioKJSXlzuWS0pKcP78ebRq1eqy22u1Wuh0OqeH3C6comIPDhERkavVO+BYLBYMHToUZ8+ehdFoRL9+/XDmzBkAQEFBAQYMGACg4u7iGzZsgM1mq/V4N910E/R6PZYvXw4AmD17Nm677TYolUoUFRVddv+xY8diyZIl2LJlC06ePIknn3yyTuN9GpKqU1TswSEiInK9el9FpdFoIISARqOBWq3G7t27HZeBKxQKHDx4EEBFwBFC1HqJOFAxBmfp0qUYO3YsEhMToVAo8PPPPwMAQkJCsHfvXvTs2dNpn6FDh+KNN97AE088gezsbPTs2RNr165tVJdbl5krgpu/pvb2ISIiovqrV8A5fPgwWrduDaDitE9VeKmah0apVDrWVYWNK43BAYA777wTx48fR0pKCvr374+wsDAAFbczqMmjjz6KRx99tD7lNyhWux1AxUR/RERE5Fp1DjibNm3Cvffei5deegkAMHLkSKhUFbuPHj0aKpUKVqsVZWVluPXWWwGgXj0qERERGDlyZH1qb9TMlbdpUNUhABIREVH91PnXdfHixZgyZQqmTZsGAOjZsyf69Onj9Lxnz55QKpXo06cPevfu7Z6KvYTFWtGDo2YPDhERkcvV+W7iRqMRPj4+ACpOOxUVFUGn0zk9LyoqQps2bXD+/HnHdnl5eQ3qTuJAw7ib+P0f/I7/ZRZi8bjeuL17S1lqICIiakzq8/td5+6DjRs3YtWqVbBarQAunH6SJMnp+cUa08BfT6o6RaVWsgeHiIjI1eo8BicpKQlffvklXnjhBUiShCeeeMJxRVXVc7PZjNLSUkyaNMmxX0JCAnx9fbFs2TK3fIDGymqrOEWlUjIAEhERuVqduw8+//xz7N69G6NHj4ZGo0FSUhK++eYb3HfffTCZTDAYDDCZTLjzzjthMBhgMBhw7733wmg0XnGyv6bIUhlwNOzBISIicrl6XSbeu3dvLF26FK+++ipmzpyJTz75BPn5+di4ceMl95Oi2lmqTlFxkDEREZHL1XuivyozZszAmDFjkJGRAa1WixMnTqBNmzaurM2rVfXgqBQ8RUVERORq9Q44J06cwNChQ9GtWzckJycDAE6ePIk+ffogKCgIEyZMwIQJExAbG+vqWr1KVcDhIGMiIiLXq9eva1paGgYPHozOnTtj9erVjvUxMTHYtWsXHn30UaxcuRLt2rXDiBEj8P3337u8YG9h5VVUREREblOvX9fvv/8eAwcORHJyMvz8/Jxe69ixI/71r3/h+PHjWLlyJU6ePIknnngCJSUlLi3YW5gdPTg8RUVERORq9TpFNW3aNNjt9lrvLyVJEh566CE8+OCDyM7ORkBAwDUX6Y14ioqIiMh96v3rWpebZ1ZtFxMTU++CmgqeoiIiInIf/rrKQAgBq70q4PAUFRERkasx4Migag4cAFCxB4eIiMjl+Osqg6rxNwBnMiYiInIH/rrKoHrA4SkqIiIi12PAkUH1U1RKzmRMRETkcgw4Mqh+o01JYsAhIiJyNQYcGVRdIq7i6SkiIiK3YMCRgZmT/BEREbkVf2FlwFmMiYiI3Iu/sDK4MIsxT1ERERG5AwOODHiKioiIyL34CysDa2XA4SBjIiIi92DAkUHVPDicxZiIiMg9+AsrAw4yJiIici/+wsrAwlNUREREbsWAIwOL4yoqNj8REZE78BdWBlZ71Skq9uAQERG5AwOODMxWjsEhIiJyJ/7CyoCnqIiIiNyLv7Ay4CkqIiIi92LAkQFPUREREbkXf2FlYLVXnKJSKdj8RERE7sBfWBlYKntwNCqeoiIiInIHBhwZcCZjIiIi9+IvrAwsPEVFRETkVvyFlUHVKSo1T1ERERG5RYMIOAcPHkTfvn0REhKCxMRECCHqvG9RURFatmyJzMxM9xXoYmUWGwDAR6WUuRIiIiLvJHvAMZlMGD16NPr06YPdu3cjLS0NK1asqPP+iYmJyMvLc1+BbnCuxAQACA/QyFwJERGRd5I94Kxfvx7FxcWYN28e2rZti9mzZ+Pjjz+u076//PIL1q1bh7CwMDdX6VrnSswAgLAArcyVEBEReSfZA05qair69+8PPz8/AECPHj2QlpZ2xf1MJhOmTJmCd999FwEBAVfcVq/XOz3kdNbRg8OAQ0RE5A6yBxy9Xo+4uDjHsiRJUCqVKCwsrHW/2bNno0OHDhgzZswV32POnDkICgpyPKKjo6+57mtxoQeHp6iIiIjcQfaAo1KpoNU692T4+PigrKysxn0OHz6MDz74AIsXL67Te8yYMQPFxcWOR3Z29jXVfC2MFhsMJisAINyfPThERETuoJK7gNDQUBw8eNBpncFggEZz+d4NIQQef/xxvPbaa4iMjKzTe2i12ktClFzOlVb03qiVEnS+sjc/ERGRV5K9B6dv377YuXOnYzkjIwMmkwmhoaGX3T4rKwu//vorEhMTERwcjODgYGRlZaFHjx5ISkryVNlXreoKqjB/LSSJ8+AQERG5g+xdCDfddBP0ej2WL1+OiRMnYvbs2bjtttugVCpRVFSEwMBAKJUX5otp1aoVMjIynI4xaNAgfP755+jZs6eHq68/xwDjQI6/ISIichfZA45KpcLSpUsxduxYJCYmQqFQ4OeffwYAhISEYO/evU7BRaVSITY29pJjREVFXfFqqobgbNUAY46/ISIichvZAw4A3HnnnTh+/DhSUlLQv39/x7w2dZ3RuDHNYpxXbATAS8SJiIjcqUEEHACIiIjAyJEj5S7D7fafKgIAdInUyVsIERGRF5N9kHFTIoTA3qwiAECv1sGy1kJEROTNGHA86FRhOc6VmqFRKtCVPThERERuw4DjQb8dOwsA6Bypg5Z3EiciInKbBjMGxxtknStD5rlSAECInwatw/yw/1QRqsZKr/g9EwAwomuETBUSERE1DQw4LpS87zTe3pRe6za+aiXG9pP3XlhERETejgHHhcIDtejcUod8vdFxSwYA6NgiEAqFBIUEjO3XGsF+nOSPiIjInRhwXGhsv9YY2681lu44gdd+OAwA8FErsP6ZwVAoeFsGIiIiT+EgYzeIC/d3PI8N82e4ISIi8jAGHDeIvSjgEBERkWcx4LhBdIif47m/lmcBiYiIPI0Bxw00qgvNGujDgENERORpDDhu8syQ9ojQ+eDxm9rIXQoREVGTI4m63rLbi+j1egQFBaG4uBg6nftumSCEgCRxgDEREZEr1Of3mz04bsRwQ0REJA8GHCIiIvI6DDhERETkdRhwiIiIyOsw4BAREZHXaZKTtFRdOKbX62WuhIiIiOqq6ne7LheAN8mAYzAYAADR0dEyV0JERET1ZTAYEBQUVOs2TXIeHLvdjpycHAQGBrr8Um69Xo/o6GhkZ2e7dY6dpo7t7BlsZ89gO3sG29kz3NnOQggYDAZERkZCoah9lE2T7MFRKBSIiopy63vodDr+B+QBbGfPYDt7BtvZM9jOnuGudr5Sz00VDjImIiIir8OAQ0RERF6HAcfFtFotZs2aBa1WK3cpXo3t7BlsZ89gO3sG29kzGko7N8lBxkREROTd2INDREREXocBh4iIiLwOAw4RkQcUFRXhjz/+QGFhodylEDUJDDgudPDgQfTt2xchISFITEys01TSVLOzZ88iLi4OmZmZjnW1tfH27dvRuXNnhIeHY968eTJU3PgkJyejTZs2UKlU6NmzJw4fPgyA7exqa9asQWxsLCZPnoyoqCisWbMGANvZnUaMGIEVK1YAqL0t165di5iYGERGRmL16tUyVNr4JCQkQJIkx6Ndu3YAGuD3WZBLGI1GERsbK6ZMmSKOHTsm7rjjDrFs2TK5y2q0CgoKxA033CAAiIyMDCFE7W2cn58vdDqdePnll0V6erro3bu32Lp1q4yfoOE7duyYCAkJEV988YXIy8sT999/vxg4cCDb2cWKiopEeHi4SE1NFUIIsXz5chETE8N2dqNPP/1UABDLly+vtS0PHDggNBqNWLJkidi/f79o166d+Ouvv2SuvuEbMGCA+OGHH0RhYaEoLCwUer2+QX6fGXBc5JtvvhEhISGitLRUCCHEvn37xI033ihzVY3XkCFDxDvvvOMUcGpr4/nz54tOnToJu90uhBDi22+/FePGjZOl9sbiu+++Ex9++KFjeevWrcLX15ft7GJZWVni008/dSynpqaKgIAAtrObnDt3TrRo0UJ07NhRLF++vNa2fOaZZ8Tw4cMd+y5YsEDMnDlTlrobC4vFInQ6nTAYDE7rG+L3maeoXCQ1NRX9+/eHn58fAKBHjx5IS0uTuarGa8mSJUhISHBaV1sbp6am4pZbbnHcW6xfv35ISUnxbNGNzKhRo/D44487lo8cOYL27duznV0sOjoa48aNAwBYLBbMnz8f99xzD9vZTZ5//nncc8896N+/P4Da2zI1NRW33nqrY1+285UdOHAAdrsdPXv2hK+vL0aMGIGsrKwG+X1mwHERvV6PuLg4x7IkSVAqlRxQeJWqt2WV2tr44td0Oh1ycnI8Uqs3MJvNePvttzF16lS2s5ukpqYiIiICP/30E9599122sxts27YNW7Zswdy5cx3ramtLtnP9paWloWPHjli1ahX2798PlUqFxx9/vEF+nxlwXESlUl0ya6OPjw/Kyspkqsj71NbGF7/Gtq+fWbNmwd/fH5MnT2Y7u0mPHj2wceNGtG/fnu3sBkajEVOmTMHixYsRGBjoWF9bW7Kd62/cuHHYvXs3BgwYgPbt22PRokXYtGkT7HZ7g/s+M+C4SGhoKAoKCpzWGQwGaDQamSryPrW18cWvse3rbuvWrVi4cCGSkpKgVqvZzm4iSRL69OmDTz75BF9//TXb2cVeffVV9O3bFyNHjnRaX1tbsp2vXfPmzWG32xEREdHgvs8MOC7St29f7Ny507GckZEBk8mE0NBQGavyLrW18cWv7d27F61atZKjzEYlIyMDY8eOxcKFC9GlSxcAbGdX2759OxITEx3LGo0GkiShc+fObGcXSkpKQnJyMoKDgxEcHIykpCQ8+eST+OSTT2psS7Zz/SUmJiIpKcmxvHPnTigUCnTv3r3hfZ/dPoy5ibBYLKJZs2aOy+ImT54sRo0aJXNVjR+qXUVVWxsXFBQIHx8fsWnTJmE2m8WIESPE008/LVfZjUJZWZno0qWLeOyxx4TBYHA8zGYz29mFcnJyhE6nEx9++KHIysoSjzzyiBgxYgS/zy6WnZ0tMjIyHI/77rtPvPnmm7W25b59+4S/v7/Yv3+/MBgMomfPnuKtt96S+ZM0bKtWrRJxcXFi8+bNYsOGDaJDhw5iwoQJDfL7zIDjQsnJycLPz0+EhYWJZs2aiUOHDsldUqNXPeAIUXsbL168WKjVahESEiLi4uJEXl6eDBU3Ht9++60AcMkjIyOD7exiGzduFF26dBGBgYHib3/7m8jPzxdC8PvsTuPHjxfLly8XQtTeli+++KLQaDRCp9OJPn36iLKyMpkqbjymT58ugoKCRGhoqEhISBAlJSVCiIb3febdxF0sLy8PKSkp6N+/P8LCwuQuxyvV1sYZGRn466+/MHjwYAQEBMhUoXdgO3sG29kzamvLtLQ0nD59GvHx8RyDc40a0veZAYeIiIi8DgcZExERkddhwCEiIiKvw4BDREREXocBh4iIiLwOAw4RucXF95opLy/Hd999B6PRiDVr1iAuLg5Go7HWY5hMJhw4cMCxbDabUVpaek11jRkzBh999FGdtq2qb+PGjVi3bh0AoKSkxPH6hg0bnJaJqOFgwCEilzt27Bjat2+P7777zrHut99+w7333ouCggL4+Pg4/tZmx44d6NGjB7Zt2wag4jLTgIAAbNmyBQCwefPmy97TxmAwYNq0aTCZTE7rCwsL8dVXX8HX1/eKn2HdunUYOHAgSkpK8M033yApKQl2ux3dunXDtm3bYDabMXr0aKxcufKKxyIiz2PAISKXa9euHa6//nq8/PLLjnXff/89unfvDpvNhsLCQvj6+iIzMxOZmZk4duwYzp49e8lxNmzYgNjYWMTHxwMAgoODAQBWqxWlpaUYN24cpk6desl+p06dwuLFi/HMM884rf/888/RsmVLPPjgg1f8DCNHjkRYWBjefvttqNVqaDQarF27Fn5+foiPj0dqaiqsVivuu++++jQNEXkIAw4RuUViYiJOnDiBEydOwGq14ssvv8TevXsRFxeH8ePH4+zZs4iLi0NcXBzat2+PpUuXOu1vs9mwZs0aTJo0CQpFxT9VISEhAICysjL4+/vjww8/xKpVq5zucwMAnTt3xtKlS/Hhhx9i9erVjvUfffQRTp065bgfVPWHQqFAbm6uY9sVK1bgpptuQlhYGNLS0nD06FEcO3YM8fHxWLt2LTZv3oyuXbtCq9WiqKgIRUVFKCgouKTXiIjkoZK7ACLyTnfccQeOHTuG0NBQLF++HCUlJTh37hxCQ0ORnJyMxMREpKenA6gY62K32532/+6773Dy5Ek89NBDjnUajQYBAQEoLi4GANx9993YunUrBgwYcMn7jxkzBhs2bMDUqVMRHx+P/fv349ChQ/jjjz/QvHlzp20TExORnZ2Nli1bOtZt374d586dw7Fjx5Ceno6YmBik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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib as mpl\n",
    "import tensorflow as tf\n",
    "# 处理中文乱码\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "# 1，数据获取\n",
    "# 1.1，数据下载\n",
    "TRAIN_URL=\"http://download.tensorflow.org/data/iris_training.csv\"\n",
    "train_path=tf.keras.utils.get_file(TRAIN_URL.split('/')[-1], TRAIN_URL)\n",
    "\n",
    "# 1.2，读取数据\n",
    "# 使用pandas读取数据，得到DataFram格式数据\n",
    "df_iris_train=pd.read_csv(train_path,header=0)\n",
    "iris_train=np.array(df_iris_train)\n",
    "# 1.3，采样\n",
    "# 提取花瓣长、花瓣宽\n",
    "x_train=iris_train[:,2:4]\n",
    "# 提取标签\n",
    "y_train=iris_train[:,4]\n",
    "# print(x_train.shape)\n",
    "# print(y_train.shape)\n",
    "# 计算样本数量\n",
    "num_train=len(x_train)\n",
    "\n",
    "# 1.4，数据形状转换\n",
    "x0_train=np.ones(num_train).reshape(-1,1)\n",
    "X_train=tf.cast(tf.concat((x0_train,x_train),axis=1),tf.float32)\n",
    "Y_train=tf.one_hot(tf.constant(y_train,dtype=tf.int32),3)\n",
    "\n",
    "# print(X_train.shape)\n",
    "# print(Y_train.shape)\n",
    "\n",
    "# 2，超参数\n",
    "lr=0.2\n",
    "iter=500\n",
    "display_step=100\n",
    "\n",
    "np.random.seed(612)\n",
    "W=tf.Variable(np.random.randn(3,3),dtype=tf.float32)\n",
    "\n",
    "acc=[]\n",
    "cce=[]\n",
    "\n",
    "\n",
    "# 3，训练\n",
    "for i in range(0,iter+1):\n",
    "    with tf.GradientTape() as tape:\n",
    "        # 线性输出\n",
    "        lineout=tf.matmul(X_train,W)\n",
    "        # 将线性结果转换为概率值\n",
    "        PRED_train = tf.nn.softmax(lineout)\n",
    "        # 计算损失\n",
    "        Loss_train = -tf.reduce_sum(Y_train*tf.math.log(PRED_train))/num_train\n",
    "    # 计算准确率\n",
    "    accuracy=tf.reduce_mean(tf.cast(tf.equal(tf.argmax(PRED_train.\n",
    "numpy(),axis=1),y_train),tf.float64))\n",
    "    acc.append(accuracy)\n",
    "    cce.append(Loss_train)\n",
    "    # 求导\n",
    "    dL_dW=tape.gradient(Loss_train,W)\n",
    "    # 更新参数\n",
    "    W.assign_sub(lr*dL_dW)\n",
    "    # 迭代打印\n",
    "    if i%display_step==0:\n",
    "        print(i,accuracy.numpy(),Loss_train.numpy())\n",
    "\n",
    "print(W)\n",
    "# 4，可视化\n",
    "plt.subplot(211)\n",
    "plt.xlabel(\"迭代次数\",fontsize='large')\n",
    "plt.ylabel(\"交叉熵损失\",fontsize='large')\n",
    "plt.plot(cce)\n",
    "plt.subplot(212)\n",
    "plt.xlabel(\"迭代次数\",fontsize='large')\n",
    "plt.ylabel(\"准确率\",fontsize='large')\n",
    "plt.plot(acc)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e3b3e36e-8418-4caf-af51-d8ac80e2a321",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
